#pragma once
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdbool.h>

#define NAME_LEN 30

//创建一个结构体存储图书信息
typedef struct book{
	int 	bookNum;				//书籍编号
	char 	bookName[NAME_LEN];		//书籍名
	char	bookAuthor[NAME_LEN];	//书籍作者
	char 	bookPublish[NAME_LEN];	//书籍出版社
}Book;
//用链表存储图书信息
typedef struct node{
	Book data;
	struct node*  after;
	struct node*  before;
}Node;
//无头链表
extern Node* head ;
extern int libofbooknum;
#define SIZE sizeof(Node)
//定义一个结构体来存储用户借书和还书的信息
typedef struct brbook{
	char  who[21];//谁借书    用户账号
	Book  data;
}BRBook;
typedef struct brnode{
	BRBook date;
	struct brnode* pL;
	struct brnode* pR;
}BRNode;
extern BRNode* brhead;
#define SIZE_BR sizeof(BRNode)

//定义一个结构体存储用户账号和密码
typedef struct user{
	char   account[21];//用户账号
	char	password[8];//用户密码
}User;

typedef struct unode{
	User  data;
	struct unode* pLeft;
	struct unode* pRight;
}UNode;
extern int userofnum;
#define SIZE_USER sizeof(UNode)
//进度条
void jindu(int num);
//遍历用户查看专用
void travelNodeofBook(Node* phead);
void managerMenuOfBook();
//管理员管理用户
void managerMenuOfUser();
Node* findNodebyName(char* bookname);
//查找节点 通过书籍作者
Node* findNodebyAuthor(char* bookauthor);
//节点尾插
void tailBRNode(BRNode** phead,BRBook data);
//用户还借书界面
void UserofBookBorrowandRepay(char* const account);
//通过用户账号查询用户借的书 并在这个函数里面输出
void findBRNodebyAccount(BRNode* head,char* account);
//用户还书 根据书名和账号去在存储用户借书的链表中匹配 匹配成功就删除，表示还书
void repaybook(char* bookname,char* account);
//存储借还书信息 存到文件中
void saveBorrowAndRepay();
//从文件中读取借还书信息 组成新的链表
void readBorrowAndRepay(BRNode** phead);